如何实现SSH断开后 进程仍然在后台运行 | 您所在的位置:网站首页 › ssh 断开 › 如何实现SSH断开后 进程仍然在后台运行 |
当使用过 disown 之后,会将把目标作业从作业列表中移除,我们将不能再使用jobs来查看它,但是依然能够用ps -ef查找到它。 但是还有一个问题,这种方法的操作对象是作业,如果我们在运行命令时在结尾加了"&"来使它成为一个作业并在后台运行,那么就万事大吉了,我们可以通过jobs命令来得到所有作业的列表。但是如果并没有把当前命令作为作业来运行,如何才能得到它的作业号呢?答案就是用 CTRL-z(按住Ctrl键的同时按住z键)了! CTRL-z 的用途就是将当前进程挂起(Suspend),然后我们就可以用jobs命令来查询它的作业号,再用bg jobspec 来将它放入后台并继续运行。需要注意的是,如果挂起会影响当前进程的运行结果,请慎用此方法。 [root@DigMouse ~]# ping 51osos.com > /dev/null ^Z [1]+ Stopped ping 51osos.com > /dev/null [root@DigMouse ~]# jobs [1]+ Stopped ping 51osos.com > /dev/null [root@DigMouse ~]# bg %1 [1]+ ping 51osos.com > /dev/null & [root@DigMouse ~]# jobs [1]+ Running ping 51osos.com > /dev/null & [root@DigMouse ~]# disown -h %1 复制代码 [root@DigMouse ~]# ps -ef | grep ping root 13716 13655 0 09:59 pts/0 00:00:00 ping 51osos.com root 13734 13655 0 10:01 pts/0 00:00:00 grep ping 复制代码 此时jobs还是能看到ping后台任务的。logout后在另一个终端测试 [root@DigMouse ~]# ps -ef | grep ping root 13716 1 0 09:59 ? 00:00:00 ping 51osos.com root 13754 13738 0 10:02 pts/1 00:00:00 grep ping 复制代码 此时Jobs无ping后台任务。PPID变成了15.screen命令 此命令非常强大。如果非常多的命令都需要忽略HUP命令,screen可以解决这一问题。screen 提供了 ANSI/VT100 的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。 用screen -dmS session name 来建立一个处于断开模式下的会话(并指定其会话名)。 用screen -list 来列出所有会话。 用screen -r session name 来重新连接指定会话。 用快捷键CTRL-a d 来暂时断开当前会话。 我的CentOS6.0上没有screen命令,不过可以使用yum安装。 [root@DigMouse ~]# yum list screen Available Packages screen.i686 4.0.3-15.el6 base [root@DigMouse ~]# yum install screen* 复制代码 Ok,系统有了screen命令了。 [root@DigMouse ~]# screen -r DigMouse [root@DigMouse ~]# ping 51osos.com > /dev/null & [1] 13789 [root@DigMouse ~]# pstree -H 13789 复制代码 此时 bash 是 screen 的子进程,而 screen 是 init(PID为1)的子进程。那么当 ssh 断开连接时,HUP 信号自然不会影响到 screen 下面的子进程了。 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |